package com.jt.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ContentCategoryMapper;
import com.jt.pojo.ContentCategory;
import com.jt.pojo.Node;
import com.jt.service.ContentCategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {
    @Autowired
    ContentCategoryMapper contentCategoryMapper;

    @Override
    public List<Node> getContentCategory(Long id) {
        QueryWrapper<ContentCategory> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("parent_id",id==null?0:id);
        List<ContentCategory> contentCategoryList=contentCategoryMapper.selectList(queryWrapper);
        List<Node> nodeList=new ArrayList<>();
        for(ContentCategory contentCategory:contentCategoryList){
            Node node=new Node();
            node.setId(contentCategory.getId()).setText(contentCategory.getName()).setState(contentCategory.getIsParent()?"closed":"open");
            nodeList.add(node);
        }
        return nodeList;
    }

    @Override
    public String save(ContentCategory contentCategory) {
        contentCategory.setIsParent(false);
        contentCategoryMapper.insert(contentCategory);

        ContentCategory contentCategory1=new ContentCategory();
        contentCategory1.setIsParent(true).setId(contentCategory.getParentId());
        contentCategoryMapper.updateById(contentCategory1);
        return "添加成功";
    }

    @Override
    public String deleteContentCategoryByid(Long id) {
        QueryWrapper<ContentCategory> queryWrapper=new QueryWrapper<>();
        QueryWrapper<ContentCategory> queryWrapper2=new QueryWrapper<>();
        Long parentId=contentCategoryMapper.selectById(id).getParentId();
        queryWrapper.eq("parent_id",parentId);
        if(contentCategoryMapper.selectById(id).getIsParent()){//如果是父类，存在子树，则先删除对应子树
            queryWrapper2.select("id").eq("parent_id",id);
            List<ContentCategory> contentCategoryList=contentCategoryMapper.selectList(queryWrapper2);
            List<Long> ids=new ArrayList<>();
            for(ContentCategory contentCategory:contentCategoryList){
                ids.add(contentCategory.getId());
            }
            contentCategoryMapper.deleteBatchIds(ids);
        }
        contentCategoryMapper.deleteById(id);
        if(contentCategoryMapper.selectCount(queryWrapper)==0){//检查删除后，之前的数是否还存在子树，不存在则修改isParent状态
            ContentCategory contentCategory=new ContentCategory().setIsParent(false).setId(parentId);
            contentCategoryMapper.updateById(contentCategory);
        }
        return "删除成功";
    }


    @Override
    public String updateContentCategory(ContentCategory contentCategory) {
        contentCategoryMapper.updateById(contentCategory);
        return "修改成功";
    }
}
